package com.tm.util;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Rocky
 * @create 2022-10-21 10:53
 */
public class VerificationCodeUtil {
    public static void main(String[] args) throws IOException, WriterException {


        // 创建一个画者
        MultiFormatWriter mfw = new MultiFormatWriter();
        // 设置： 内容
        String content = "把甄克俊送给你";
        // 设置： 类型
        BarcodeFormat type = BarcodeFormat.QR_CODE;
        // 设置： 宽度
        int width = 600;
        // 设置： 高度
        int height = 600;
        // 设置： 其他信息 map
        Map map=new HashMap();
        // 设置: 编码utf-8
        map.put(EncodeHintType.CHARACTER_SET,"UTF-8");
        // 设置：二维码容错机制 l 最小
        map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
        // 设置：二维码两边空白区域大小
        map.put(EncodeHintType.MARGIN,2);
        // 画一个虚拟二维码  将刚才的设置好的参数放入
        BitMatrix matrix = mfw.encode(content, type, width, height, map);
        // 流虚拟二维码对象的信息写入文件
        // 采用 黑白色  一般二维码都是 黑白颜色 也可以设置其他颜色
        int black = Color.BLACK.getRGB();
        int white = Color.WHITE.getRGB();
        // 构建一个虚拟的  image 对象 设置宽高  字体的颜色
        BufferedImage image =new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        // 循环描写四个角
        for (int x = 0 ; x<width ; x++ ){

            for (int y = 0 ; y<height ; y++){

                image.setRGB(x,y,matrix.get(x,y)?black:white);
            }

        }
        // 设置二维码位置
        File file = new File("D://照片或墙纸//QRCode1.jpg");
        // 执行
        ImageIO.write(image, "jpg", file);


    }

}
